"""
类名：EmpApi
实例属性：emp_url，保存网址"http://ihrm-test.itheima.net/api/sys/user"
实例方法：
    def __init__(self):
        # 添加属性
    def add_emp(self, body, au_headers):
        # 功能：添加员工
        # :param body: 添加员工的请求体
        # :param headers: 请求头
        # :return: 响应对象
    def query_emp(self, emp_id, au_headers):
        # 功能：查询指定id的员工
        # :param emp_id: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
    def modify_emp(self, body, emp_id, au_headers):
        # 功能：修改指定id的员工
        # :param body: 修改员工的请求体
        # :param emp_id: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
    def delete_emp(self, emp_id, au_headers):
        # 功能：删除指定id的员工
        # :param emp_id: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
"""
import  unittest
from login_api import LoginApi
import requests

class EmpApi(object):
    def __init__(self):
        self.emp_url = "http://ihrm-test.itheima.net/api/sys/user"

    def add_emp(self, body, au_headers):
        # 功能：添加员工
        # :param body: 添加员工的请求体
        # :param headers: 请求头
        # :return: 响应对象
        response = requests.post(self.emp_url,json=body,headers=au_headers)
        return response
    def query_emp(self,emp_id,au_headers):
        # 功能：查询指定id的员工
        # :param emp_id: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
        response = requests.get(self.emp_url + '/' + emp_id,headers=au_headers)
        return response
    def modify_emp(self, body, emp_id, au_headers):
        # 功能：修改指定id的员工
        # :param body: 修改员工的请求体
        # :param emp_id: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
        response = requests.put(self.emp_url + "/" + emp_id,json=body,headers=au_headers)
        return response

    def delete_emp(self, emp_id, au_headers):
        # 功能：删除指定id的员工
        # :param emp_id: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
        response = requests.delete(self.emp_url + "/" + emp_id,headers=au_headers)
        return response

class TestEmp(unittest.TestCase):
    def test_emp(self):
        login_obj = LoginApi()
        body = {
            "mobile":"13800000002",
            "password":"123456"
        }
        au_headers = login_obj.get_au_headers(body)
        print(f'获取的请求头内容为：{au_headers}')

        # 0. 实例化对象   对象名 = 类名()
        emp_obj = EmpApi()
        # 添加员工的接口测试
        # 1. 测试数据
        mobile = "17770708080"
        body = {
            "username": "perlina",
            "mobile": mobile,
            "timeOfEntry": "2021-12-01",
            "formOfEmployment": 1,
            "workNumber": "1222",
            "departmentName": "销售部",
            "departmentId": "1480372072440963072",
            "correctionTime": "2022-01-30T16:00:00.000Z"

        }
        # 2. 调用接口，获取响应对象
        # 2.1 实例对象调用实例方法(一定不能通过类名调用)，获取响应对象
        response = emp_obj.add_emp(body,au_headers)
        # 3. 打印响应内容的json格式
        json_data = response.json()
        print(f'添加员工的结果为：{json_data}')
        # 4. 断言，预期结果
        self.assertEqual(200,response.status_code)
        self.assertEqual(True,json_data['success'])
        self.assertEqual(10000,json_data['code'])
        self.assertIn("成功",json_data['message'])

        emp_id = json_data.get('data').get('id')
        print(f'员工id={emp_id}')

        # 查询员工的接口测试
        # 1. 测试数据,前面提取的员工id
        # 2. 调用接口，获取响应对象
        # 2.1 实例对象调用实例方法(一定不能通过类名调用)，获取响应对象
        response = emp_obj.query_emp(emp_id,au_headers)
        # 3. 打印响应内容的json格式
        json_data = response.json()
        print(f'查询员工的结果为：{json_data}')
        # 4. 断言，预期结果
        self.assertEqual(200,response.status_code)
        self.assertEqual(True,json_data['success'])
        self.assertEqual(10000,json_data['code'])
        self.assertIn("成功",json_data['message'])


        # 修改员工的接口测试
        # 1. 测试数据,前面提取的员工id
        # 2. 调用接口，获取响应对象
        # 2.1 实例对象调用实例方法(一定不能通过类名调用)，获取响应对象
        body = {"username":"lisa"}
        response = emp_obj.modify_emp(body, emp_id, au_headers)
        # 3. 打印响应内容的json格式
        json_data = response.json()
        print(f'修改员工的结果为：{json_data}')
        # 4. 断言，预期结果
        self.assertEqual(200,response.status_code)
        self.assertEqual(True,json_data['success'])
        self.assertEqual(10000,json_data['code'])
        self.assertIn("成功",json_data['message'])

        # 删除员工的接口测试
        # 1. 测试数据,前面提取的员工id
        # 2. 调用接口，获取响应对象
        # 2.1 实例对象调用实例方法(一定不能通过类名调用)，获取响应对象
        response = emp_obj.delete_emp(emp_id,au_headers)
        # 3. 打印响应内容的json格式
        json_data = response.json()
        print(f'删除员工的结果为：{json_data}')
        # 4. 断言，预期结果
        self.assertEqual(200,response.status_code)
        self.assertEqual(True,json_data['success'])
        self.assertEqual(10000,json_data['code'])
        self.assertIn("成功",json_data['message'])


